﻿using Core.Model.Types;

namespace Core.Controllers.Helpers
{
    //public static class FrustumHelper
    //{
    //    public static Vector3 GetPositiveVertex(this BoundingBox aabb,
    //                                            ref Vector3 normal)
    //    {
    //        Vector3 p = aabb.Minimum;

    //        if (normal.X >= 0)
    //            p.X = aabb.Maximum.X;
    //        if (normal.Y >= 0)
    //            p.Y = aabb.Maximum.Y;
    //        if (normal.Z >= 0)
    //            p.Z = aabb.Maximum.Z;

    //        return p;

    //    }

    //    public static Vector3 GetNegativeVertex(this BoundingBox aabb,
    //                                            ref Vector3 normal)
    //    {
    //        Vector3 p = aabb.Maximum;
    //        if (normal.X >= 0)
    //            p.X = aabb.Minimum.X;
    //        if (normal.Y >= 0)
    //            p.Y = aabb.Minimum.Y;
    //        if (normal.Z >= 0)
    //            p.Z = aabb.Minimum.Z;

    //        return p;
    //    }

    //    public static bool FastIntersects(this BoundingFrustum boundingfrustum,
    //                                      BoundingBox aabb)
    //    {
    //        Plane plane; Vector3 normal, p;

    //        plane = boundingfrustum.Bottom;
    //        normal = plane.Normal;
    //        normal.X = -normal.X;
    //        normal.Y = -normal.Y;
    //        normal.Z = -normal.Z;
    //        p = aabb.GetPositiveVertex(ref normal);
    //        if (-plane.D + normal.X * p.X + normal.Y * p.Y + normal.Z * p.Z < 0)
    //            return false;

    //        plane = boundingfrustum.Far;
    //        normal = plane.Normal;
    //        normal.X = -normal.X;
    //        normal.Y = -normal.Y;
    //        normal.Z = -normal.Z;
    //        p = aabb.GetPositiveVertex(ref normal);
    //        if (-plane.D + normal.X * p.X + normal.Y * p.Y + normal.Z * p.Z < 0)
    //            return false;

    //        plane = boundingfrustum.Left;
    //        normal = plane.Normal;
    //        normal.X = -normal.X;
    //        normal.Y = -normal.Y;
    //        normal.Z = -normal.Z;
    //        p = aabb.GetPositiveVertex(ref normal);
    //        if (-plane.D + normal.X * p.X + normal.Y * p.Y + normal.Z * p.Z < 0)
    //            return false;

    //        plane = boundingfrustum.Near;
    //        normal = plane.Normal;
    //        normal.X = -normal.X;
    //        normal.Y = -normal.Y;
    //        normal.Z = -normal.Z;
    //        p = aabb.GetPositiveVertex(ref normal);
    //        if (-plane.D + normal.X * p.X + normal.Y * p.Y + normal.Z * p.Z < 0)
    //            return false;

    //        plane = boundingfrustum.Right;
    //        normal = plane.Normal;
    //        normal.X = -normal.X;
    //        normal.Y = -normal.Y;
    //        normal.Z = -normal.Z;
    //        p = aabb.GetPositiveVertex(ref normal);
    //        if (-plane.D + normal.X * p.X + normal.Y * p.Y + normal.Z * p.Z < 0)
    //            return false;

    //        plane = boundingfrustum.Top;
    //        normal = plane.Normal;
    //        normal.X = -normal.X;
    //        normal.Y = -normal.Y;
    //        normal.Z = -normal.Z;
    //        p = aabb.GetPositiveVertex(ref normal);
    //        if (-plane.D + normal.X * p.X + normal.Y * p.Y + normal.Z * p.Z < 0)
    //            return false;

    //        return true;
    //    }
    //}
}
